listbox: Fix a crash during keynav
authorMatthias Clasen <mclasen@redhat.com>
Fri, 15 Dec 2017 23:46:21 +0000 (18:46 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 15 Dec 2017 23:46:21 +0000 (18:46 -0500)
The code was asserting something that was not always holding
true. We can hit row == NULL here on page-up too. Handle that
case by moving to the first row.

https://bugzilla.gnome.org/show_bug.cgi?id=791549

gtk/gtklistbox.c

index 702e3424ccf20d061bece76f61f66bcedd2d7a76..f7fa5650984aeeea6605db7405cdfb67193274e4 100644 (file)
@@ -3088,17 +3088,20 @@ gtk_list_box_move_cursor (GtkListBox      *box,
               GSequenceIter *cursor_iter;
               GSequenceIter *next_iter;
 
-              /* A NULL row should only happen when the list box didn't
-               * have enough rows to fill its height and the user made
-               * a page movement down, so the count must be positive */
-              g_assert (count > 0);
-
-              cursor_iter = ROW_PRIV (priv->cursor_row)->iter;
-              next_iter = gtk_list_box_get_last_visible (box, cursor_iter);
-
-              if (next_iter)
+              if (count > 0)
+                {
+                  cursor_iter = ROW_PRIV (priv->cursor_row)->iter;
+                  next_iter = gtk_list_box_get_last_visible (box, cursor_iter);
+
+                  if (next_iter)
+                    {
+                      row = g_sequence_get (next_iter);
+                      end_y = ROW_PRIV (row)->y;
+                    }
+                }
+              else
                 {
-                  row = g_sequence_get (next_iter);
+                  row = gtk_list_box_get_row_at_index (box, 0);
                   end_y = ROW_PRIV (row)->y;
                 }
             }